//引用express框架
const express = require('express');
//引用route路由
const getStep = express.Router();
//引用数据库操作逻辑
var mongoose = require('../model/db')
var Task_stepBind = require('../model/task_stepBind')
var TaskJoin = require('../model/TaskJoin')
var TaskPush = require('../model/taskPush')
// 获取当前时间
var date = new Date()

getStep.get('/', (req, res) => {
    let id = req.query.id
    let token = req.query.token
    id = mongoose.Types.ObjectId(id)
    let respon = res
    let completeSum = ''
    let data = {
        status: 200,
        tips: 'success',
        step: ''
    }

    // 查询步骤
    Task_stepBind.aggregate([{
        // 外键关联查询
        $lookup: {
            from: "Step",
            localField: 'stepId',
            foreignField: '_id',
            as: 'infor'
        }
    }, {
        // 查询条件
        $match: {
            taskId: {
                $eq: id
            }
        }
    }, {
        // 筛选字段
        $project: {
            index: 1,
            infor: 1
        }
    }
    ]).exec(function (err, doc) {
        if (err) {
            data.status = '600'
            respon.status(200).json(data)
            return
        }
        data.step = doc
        completeSum = doc.length
        respon.status(200).json(data)
        // 判断是否为发布者参加自己的任务
        TaskPush.find({
            'taskId': id,
        }, function (err, doc) {
            // 若失败则告知原因，并返回
            if (err) {
                data.tips = err
                respon.status(200).json(data)
            }
            if (doc[0].openId == token) {
            } else {
                // 加入任务关联
                TaskJoin.aggregate([{
                    // 查询条件
                    $match: {
                        openId: { $eq: token },
                        taskId: { $eq: id }
                    }
                }
                ], (err, doc) => {
                    if (doc.length == 0) {
                        // 存储任务和用户关联信息
                        let taskJoin = {
                            openId: token,     //任务发布者关联ID
                            taskId: id,     //任务关联ID
                            completeSum: completeSum,
                            joinTime: date.getTime()    //开始任务时间
                        }
                        // 建立任务存储对象
                        let join = new TaskJoin(taskJoin)
                        join.save((err, doc) => {
                            // 存储失败处理
                            if (err) {
                                data.status = '600'
                                respon.status(200).json(data)
                            }
                        })
                    }
                })
            }
        })
    })


})

//将路由对象做为模块成员进行导出
module.exports = getStep;